package com.redepronik.negosys.invfac.entity;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.validation.constraints.Pattern;

/**
 * The persistent class for the caracteristica database table.
 * 
 */
@Entity
@Table(schema = "invfac", name = "caracteristica")
@NamedQuery(name = "Caracteristica.findAll", query = "SELECT c FROM Caracteristica c")
public class Caracteristica implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@SequenceGenerator(allocationSize = 1, name = "CARACTERISTICA_CARACTERISTICAID_GENERATOR", sequenceName = "INVFAC.CARACTERISTICA_CARACTERISTICAID_SEQ")
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CARACTERISTICA_CARACTERISTICAID_GENERATOR")
	@Column(unique = true, nullable = false)
	private Integer caracteristicaid;

	@Column(nullable = false)
	private Boolean activo;

	@Pattern(regexp = "[A-Za-z ñÑ]{3,50}", message = "EL CAMPO CARACTERÍSTICA ACEPTA DE 3 A 50 LETRAS")
	@Column(nullable = false, length = 50)
	private String nombre;

	// bi-directional many-to-one association to Grupocaracteristica
	@OneToMany(orphanRemoval = true, cascade = CascadeType.ALL, mappedBy = "caracteristica")
	private List<Grupocaracteristica> grupocaracteristicas;

	// bi-directional many-to-one association to Productocaracteristica
	@OneToMany(orphanRemoval = true, cascade = CascadeType.ALL, mappedBy = "caracteristica")
	private List<Productocaracteristica> productocaracteristicas;

	public Caracteristica() {
	}

	public Grupocaracteristica addGrupocaracteristica(
			Grupocaracteristica grupocaracteristica) {
		getGrupocaracteristicas().add(grupocaracteristica);
		grupocaracteristica.setCaracteristica(this);

		return grupocaracteristica;
	}

	public Productocaracteristica addProductocaracteristica(
			Productocaracteristica productocaracteristica) {
		getProductocaracteristicas().add(productocaracteristica);
		productocaracteristica.setCaracteristica(this);

		return productocaracteristica;
	}

	public Boolean getActivo() {
		return this.activo;
	}

	public Integer getCaracteristicaid() {
		return this.caracteristicaid;
	}

	public List<Grupocaracteristica> getGrupocaracteristicas() {
		return this.grupocaracteristicas;
	}

	public String getNombre() {
		return this.nombre;
	}

	public List<Productocaracteristica> getProductocaracteristicas() {
		return this.productocaracteristicas;
	}

	public Grupocaracteristica removeGrupocaracteristica(
			Grupocaracteristica grupocaracteristica) {
		getGrupocaracteristicas().remove(grupocaracteristica);
		grupocaracteristica.setCaracteristica(null);

		return grupocaracteristica;
	}

	public Productocaracteristica removeProductocaracteristica(
			Productocaracteristica productocaracteristica) {
		getProductocaracteristicas().remove(productocaracteristica);
		productocaracteristica.setCaracteristica(null);

		return productocaracteristica;
	}

	public void setActivo(Boolean activo) {
		this.activo = activo;
	}

	public void setCaracteristicaid(Integer caracteristicaid) {
		this.caracteristicaid = caracteristicaid;
	}

	public void setGrupocaracteristicas(
			List<Grupocaracteristica> grupocaracteristicas) {
		this.grupocaracteristicas = grupocaracteristicas;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public void setProductocaracteristicas(
			List<Productocaracteristica> productocaracteristicas) {
		this.productocaracteristicas = productocaracteristicas;
	}

}